package com.bei_en.common.util.baidu_tuisong.sample;

import net.sf.json.JSONObject;
import com.baidu.yun.core.log.YunLogEvent;
import com.baidu.yun.core.log.YunLogHandler;
import com.baidu.yun.push.auth.PushKeyPair;
import com.baidu.yun.push.client.BaiduPushClient;
import com.baidu.yun.push.constants.BaiduPushConstants;
import com.baidu.yun.push.exception.PushClientException;
import com.baidu.yun.push.exception.PushServerException;
import com.baidu.yun.push.model.PushMsgToSingleDeviceRequest;
import com.baidu.yun.push.model.PushMsgToSingleDeviceResponse;

public class AndroidPushMsgToSingleDevice {

	public static void main(String[] args) throws PushClientException,
			PushServerException {

		// 1. get apiKey and secretKey from developer console
		String apiKey = "f5UFIaTrNnNZv40rnAudGxAI";
		String secretKey = "3YpzNrj1UvSsxAcldVRjPIxCyaWnpnpA";
		PushKeyPair pair = new PushKeyPair(apiKey, secretKey);

		// 2. build a BaidupushClient object to access released interfaces
		BaiduPushClient pushClient = new BaiduPushClient(pair,
				BaiduPushConstants.CHANNEL_REST_URL);

		// 3. register a YunLogHandler to get detail interacting information
		// in this request.
		pushClient.setChannelLogHandler(new YunLogHandler() {

			@Override
			public void onHandle(YunLogEvent event) {

				System.out.println(event.getMessage());
			}
		});

		try {
			// 4. specify request arguments
			// 创建 Android的通知
			JSONObject notification = new JSONObject();
			notification.put("title", "你好");
			notification.put("description", "Hello Baidu Push");
			notification.put("notification_builder_id", 0);// android客户端自定义通知样式，如果没有设置默认为0;
			/*
			 * 只有notification_builder_id为0时有效，可以设置通知的基本样式包括(响铃：0x04;振动：0x02;可清除：0x01
			 * ;), 这是一个flag整形，每一位代表一种样式,如果想选择任意两种或三种通知样式，
			 * notification_basic_style的值即为对应样式数值相加后的值。
			 */
			notification.put("notification_basic_style", 4);
			notification.put("open_type", 2);// 点击通知后的行为(1：打开Url; 2：自定义行为；);
			// notification.put("url", "http://push.baidu.com");//
			// 需要打开的Url地址，open_type为1时才有效;
			/*
			 * open_type为2时才有效，Android端SDK会把pkg_content字符串转换成Android Intent,
			 * 通过该Intent打开对应app组件，所以pkg_content字符串格式必须遵循Intent uri格式
			 * 最简单的方法可以通过Intent方法toURI()获取
			 */
			notification.put("pkgcontent", "http://push.baidu.com");
			JSONObject jsonCustormCont = new JSONObject();
			jsonCustormCont.put("key", "value"); // 自定义内容，key-value
			notification.put("custom_content", jsonCustormCont);

			PushMsgToSingleDeviceRequest request = new PushMsgToSingleDeviceRequest()
					/* .addDeployStatus(1) */// ios
					// 1
					// 开发,2
					// 生产
					.addChannelId("4520154584147018573")
					.addMsgExpires(new Integer(3600)) // message有效时间
					/* .addTopicId("") */// 指定的topic变量. 长度限制 1 –
					// 128字节，由数字，字母和下划线组成。
					.addMessageType(1).// 1：通知,0:透传消息. 默认为0 注：IOS只有通知.
					addMessage(notification.toString()).addDeviceType(3);// deviceType
			// =>
			// 3:android,
			// 4:ios
			// 5. http request
			PushMsgToSingleDeviceResponse response = pushClient
					.pushMsgToSingleDevice(request);
			// Http请求结果解析打印
			System.out.println("msgId: " + response.getMsgId() + ",sendTime: "
					+ response.getSendTime());
		} catch (PushClientException e) {
			/*
			 * ERROROPTTYPE 用于设置异常的处理方式 -- 抛出异常和捕获异常,'true' 表示抛出, 'false' 表示捕获。
			 */
			if (BaiduPushConstants.ERROROPTTYPE) {
				throw e;
			} else {
				e.printStackTrace();
			}
		} catch (PushServerException e) {
			if (BaiduPushConstants.ERROROPTTYPE) {
				throw e;
			} else {
				System.out.println(String.format(
						"requestId: %d, errorCode: %d, errorMessage: %s",
						e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
			}
		}
	}
}
